﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

//以下程序报错，因为基类和派生类中f()相同，而A中的f()会被隐藏，调用不过去，如果要调用则必须显示调用b.A::f();
// 子类同名隐藏了父类方法的原因
//class A
//{
//public:
//
//  void f() { cout << "A::f()" << endl; }
//
//  int a;
//
//};
//
//class B : public A
//{
//
//public:
//
//	void f(int a) { cout << "B::f()" << endl; }
//
//	int a;
//
//};
//
//int main()
//{
//	B b;
//	//b.f();// 子类和父类同名隐藏了父类方法的所以导致报错
//	b.A::f();//这样就可以了(显示调用)
//	return 0;
//
//}

//
////子类实例化对象，由于继承的有父类。所以会先构造父类，然后在构造子类，析构顺序完全按照构造的相反顺序进行析构，
//class A
//{
//public:
//  A() { cout << "A::A()" << endl; }
//  ~A() { cout << "A::~A()" << endl; }
//  int a;
//};
//
//class B : public A
//{
//public:
//	B() { cout << "B::B()" << endl; }
//
//	~B() { cout << "B::~B()" << endl; }
//	int b;
//};
//
//void f()
//{
//	B b;//调用默认构造
//}
//int main()
//{
//	f();
//	return 0;
//}


////练习题
////多继承中指针偏移问题？下⾯说法正确的是(c)
////A：p1 == p2 == p3      B：p1 < p2 < p3    C：p1 == p3 != p2    D：p1 != p2 != p3
//class Base1 { public: int _b1 = 1; };
//class Base2 { public: int _b2 = 2; };
//class Derive : public Base1, public Base2 {
//public:
//	int _d = 3;
//	int _e = 4;
//};
//
//int main()
//{
//	Derive d;
//	Base1* p1 = &d;
//	Base2* p2 = &d;
//	Derive* p3 = &d;
//
//	int i = 0;
//	cout << i << endl;
//
//	return 0;
//}